package com.atguigu.mybatis.mapper;

import com.atguigu.mybatis.entity.Employee;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface EmployeeMapper {

    /**
     * 功能：根据 id 查询 Employee 对象
     * 底层：需要执行 SQL 语句，但是 SQL 语句在 Mapper 配置文件中‘
     * 对应关系：方法名作为 Mapper 配置文件中 SQL 语句标签的 id 属性值
     * @param empId
     * @return
     */
    Employee selectEmployee(Integer empId);

    /**
     * 功能：根据 id 删除 Employee 对象
     * @param empId
     */
    void deleteById(Integer empId);

    /**
     * 功能：添加 Employee 对象
     * @param employee
     * @return
     */
    int insertEmployee(Employee employee);

    /**
     * 功能：根据 id 更新 Employee 对象
     * @param empId
     * @param empSalary
     */
    void updateEmpSalary(@Param("empId") Integer empId, @Param("empSalary") Double empSalary);

    /**
     * 功能：根据 Map 对象更新 Employee 对象
     * @param paramMap
     */
    void updateEmpSalaryByMap(Map<String, Object> paramMap);

    /**
     * 功能：查询所有 Employee 对象的平均薪资
     * @return
     */
    Double selectAvgSalary();

    /**
     * 功能：查询所有 Employee 对象
     * @return
     */
    List<Employee> selectAll();

    /**
     * 功能：查询最高工资和最低工资
     * @return
     */
    Map<String, Double> selectMinAndMaxSalary();

    /**
     * 功能：保存 Employee 对象，并返回自增主键
     * @param employee
     */
    void insertEmployeeGeneratedPK(Employee employee);
}
